<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
</html>
<script src="./index.js"></script>
<script>
//    let arr2 = [8,9,10,11];
//    console.log(arr2.add());

//    let obj = new Start();
//    obj.sing();


// new 关键字干了什么？

function Child(val){
  this.name = val;
}
// let obj = new Child();
// console.log(obj);
// 创建⼀个新的对象 obj
// 将对象与构建函数通过原型链连接起来
// 将构建函数中的 this 绑定到新建的对象 obj 上
// 根据构建函数返回类型作判断，如果是原始值则被忽略，如果是返回对象，需要正常处理


function mynew(Func, ...args) {
 // 1.创建⼀个新对象
 const obj = {}
 // 2.新对象原型指向构造函数原型对象
 obj.__proto__ = Func.prototype
 // 3.将构建函数的this指向新对象
 let result = Func.apply(obj, args)
 // 4.根据返回值判断
 return result instanceof Object ? result : obj
}

// let obj = mynew(Child,'蔡徐坤');
// console.log(obj);


let obj = new Child('蔡徐坤')
console.log(obj);
</script>